#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

#include <cstdio>
#include <cstdlib>
int main(int argc, const char* argv[]) {
    int pid = fork();

    int stat_loc;
    if (pid > 0) {
        // 父进程
        printf("我是父进程pid:%d，子进程pid:%d\n", getpid(), pid);
        // ==============wait系统调用==================
        // 1. 可选择等待指定子进程
        // 2. 子进程正常退出，可以获取退出状态码
        // 3. 子进程被信号异常退出，可以获取信号
        //
        int exit_pid = wait(&stat_loc);
        printf("子进程已经退出，子进程pid为%d\n", exit_pid);
        if (WIFEXITED(stat_loc)) {
            printf("子进程正常退出，退出值为%d\n", WEXITSTATUS(stat_loc));
        }

        if (WIFSIGNALED(stat_loc)) {
            printf("子进程被信号杀死，信号为%d\n", WTERMSIG(stat_loc));
            if (WCOREDUMP(stat_loc)) {
                printf("生成了核心转储文件\n");
            }
        }
    }
    if (pid == 0) {
        // 子进程
        printf("我是子进程pid:%d，父进程pid:%d\n", getpid(), getppid());
        sleep(10);
        exit(66);
    }
    return 0;
}
